package study
// channel 进行资源的同步
import (
	"sync"
	"math/rand"
	"time"
	"fmt"
)

var wg sync.WaitGroup

func init()  {
	rand.Seed(time.Now().UnixNano())
}

func ChannelTest()  {

	court:=make(chan int)
	wg.Add(2)
	// 启动两个选手
	go palyer("jack",court)
	go palyer("tom",court)
	// 发球
	court<-1
	// 等待游戏结束
	wg.Wait()
}

func palyer(name string,court chan int)  {
	// 在函数退出时调用 Done 来通知 main 函数工作已经完成
	defer wg.Done()
	for {
		ball,ok:=<-court
		if !ok {
			// 如果通道关闭则为胜利
			fmt.Print("Player %s Won\n", name)
			return
		}
		// 选取随机数判断是都丢球
		n:=rand.Intn(100)
		if n%13==0 {
			// 满足丢球条件
			fmt.Print("Player %s Missed\n",name)
			// 丢球后关闭通道
			close(court)
			return
		}
		ball++
		// 将球打向对手
		court<-ball
		fmt.Println("Player %s Hit %d\n",name,ball)
	}


}